/******************************************************************************* * Copyright (c) 2008, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation ******************************************************************************/ package org.eclipse.ui.tests.statushandlers; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Widget; import org.eclipse.ui.internal.WorkbenchMessages; import org.eclipse.ui.tests.harness.util.UITestCase; /** * This class parses the structure of the Shell and finds necessary widgets. * * @since 3.4 * */ public class StatusDialogUtil { public static Label getTitleImageLabel() { Composite c = getTitleAreaComposite(); if (c != null & !c.isDisposed()) { return (Label) c.getChildren()[0]; } return null; } public static Label getTitleLabel(){ Composite c = getTitleAreaComposite(); if (c == null || c.isDisposed()) { return null; } return (Label) c.getChildren()[1]; } public static Label getSingleStatusLabel(){ Composite c = getTitleAreaComposite(); if (c == null || c.isDisposed() || c.getChildren().length < 3){ return null; } Composite d = (Composite) c.getChildren()[2]; return (Label) d.getChildren()[0]; } public static Shell getStatusShell(){ UITestCase.waitForJobs(100, 1000); return getStatusShellImmediately(); } public static Shell getStatusShellImmediately() { Shell[] shells = Display.getDefault().getShells(); for (int i = 0; i < shells.length; i++) { if (shells[i].getText().equals("Problem Occurred") || shells[i].getText().equals( "Multiple problems have occurred")) { if (!shells[i].isDisposed()) { return shells[i]; } } } return null; } private static Composite getTitleAreaComposite(){ Shell shell = getStatusShell(); if(shell == null || shell.isDisposed()){ return null; } Control controls[] = shell.getChildren(); return (Composite)((Composite)controls[0]).getChildren()[0]; } private static Composite getListAreaComposite(){ Shell shell = getStatusShell(); if(shell == null || shell.isDisposed()){ return null; } Control controls[] = shell.getChildren(); return (Composite)((Composite)controls[0]).getChildren()[1]; } private static Composite getButtonBar(){ Shell shell = getStatusShell(); if(shell == null || shell.isDisposed()){ return null; } Control controls[] = shell.getChildren(); return (Composite)((Composite)controls[0]).getChildren()[2]; } public static Link getSupportLink() { Composite c = getButtonBar(); if (c == null || c.isDisposed()) { return null; } Composite linkArea = (Composite) c.getChildren()[0]; for (int i = 0; i < linkArea.getChildren().length; i++) { Widget w = linkArea.getChildren()[i]; if (w instanceof Link) { if (((Link) w) .getText() .equals( WorkbenchMessages.WorkbenchStatusDialog_SupportHyperlink)) { return (Link) w; } } } return null; } public static Link getErrorLogLink() { Composite c = getButtonBar(); if (c == null || c.isDisposed()) { return null; } Composite linkArea = (Composite) c.getChildren()[0]; for (int i = 0; i < linkArea.getChildren().length; i++) { Widget w = linkArea.getChildren()[i]; if (w instanceof Link) { if (((Link) w) .getText() .equals( WorkbenchMessages.ErrorLogUtil_ShowErrorLogHyperlink)) { return (Link) w; } } } return null; } public static Button getActionButton(){ Composite c = getButtonBar(); if(c == null || c.isDisposed()){ return null; } return (Button) c.getChildren()[1]; } public static Button getOkButton(){ Composite c = getButtonBar(); if(c == null || c.isDisposed()){ return null; } // retrieve buttons based on dismissal alignment if(c.getDisplay().getDismissalAlignment() == SWT.RIGHT){ return (Button) c.getChildren()[3]; } return (Button) c.getChildren()[2]; } public static Button getDetailsButton(){ Composite c = getButtonBar(); if(c == null || c.isDisposed()){ return null; } // retrieve buttons based on dismissal alignment if(c.getDisplay().getDismissalAlignment() == SWT.RIGHT){ return (Button) c.getChildren()[2]; } return (Button) c.getChildren()[3]; } public static Table getTable(){ Composite c = getListAreaComposite(); if(c == null || c.getChildren().length == 0){ return null; } return (Table) c.getChildren()[0]; } }